package pucp.carpooling;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.actionbarsherlock.app.SherlockFragment;

import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
import pucp.carpooling.adapter.ListViewAdapterMisNotificaciones;
import pucp.carpooling.adapter.ListViewAdapterVehiculos;
import pucp.carpooling.controller.JSONParserObject;
import pucp.carpooling.model.UserLogeado;
import pucp.carpooling.R;

public class FragmentMisNotificaciones extends SherlockFragment implements
		OnClickListener {

	private static final String url = "http://subete.inf.pucp.edu.pe/ServiciosMobile/consulta_notificaciones";
	String[] roles, idavisos, direccion, notificador, idUserNotifier ,fechas, notificationtype,
			precio, tripDateTime, idadvicenotifier;

	private static final String SUCCESS = "Success";
	ListView list;
	int[] flag;
	ListViewAdapterMisNotificaciones adapter;
	JSONParserObject jsonParser = new JSONParserObject();
	JSONArray notificaciones = null;

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {

		onViewStateRestored(savedInstanceState);
		View view = inflater.inflate(R.layout.fragment_mis_notificaciones,
				container, false);
		list = (ListView) view.findViewById(R.id.listaNotificaciones);

		new getNotificaciones().execute();
		

		list.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {

				if (roles[position].equals("Driver")) {
					Intent i = new Intent(getActivity(),
							SingleItemViewNotificacionConductor.class);

					String coords = null;

					try {
						coords = notificaciones.getJSONObject(position)
								.getString("Detail");
					} catch (JSONException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					i.putExtra("coordenadas", coords);
					i.putExtra("idadvicenotifier", idadvicenotifier);
					i.putExtra("notificador", notificador);
					i.putExtra("direccion", direccion);
					i.putExtra("notificationtype",notificationtype);
					i.putExtra("precio", precio);
					i.putExtra("idUserNotifier",idUserNotifier);
					i.putExtra("flag", flag);
					i.putExtra("fecha", tripDateTime);
					i.putExtra("idavisos", idavisos);
					i.putExtra("position", position);

					startActivity(i);

				} else {
					Intent i = new Intent(getActivity(),
							SingleItemViewNotificacionPasajero.class);

					String coords = null;

					try {
						coords = notificaciones.getJSONObject(position)
								.getString("Detail");
					} catch (JSONException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					i.putExtra("coordenadas", coords);
					i.putExtra("notificador", notificador);
					i.putExtra("direccion", direccion);
					i.putExtra("notificationtype",notificationtype);
					i.putExtra("fecha", tripDateTime);
					i.putExtra("idUserNotifier",idUserNotifier);
					i.putExtra("precio", precio);
					i.putExtra("flag", flag);
					i.putExtra("idavisos", idavisos);
					i.putExtra("position", position);

					startActivity(i);

				}

			}

		});

		return view;

	}

	@Override
	public void onClick(View v) {
	}

	private class getNotificaciones extends AsyncTask<Void, Void, Void> {

		@Override
		protected void onPreExecute() {

		}

		@Override
		protected Void doInBackground(Void... arg0) {
			try {

				JSONParserObject sh = new JSONParserObject();
				List<NameValuePair> params = new ArrayList<NameValuePair>();
				final UserLogeado userlogged = (UserLogeado) getActivity()
						.getApplication();
				final String jsonLogin = userlogged.getJsonUser();
				JSONObject usuarioLogeado = new JSONObject(jsonLogin);
				params.add(new BasicNameValuePair("idUser", usuarioLogeado
						.getString("idUser")));
				String jsonStr = sh.makeServiceCall(url, JSONParserObject.POST,
						params);
				Log.d("Response: ", "> " + jsonStr);
				if (jsonStr != null) {
					try {
						JSONObject jsonObj = new JSONObject(jsonStr);
						if (jsonObj.getString(SUCCESS).equals("Yes")) {
							notificaciones = jsonObj
									.getJSONArray("NotificacionesUsuario");
							roles = new String[notificaciones.length()];
							idavisos = new String[notificaciones.length()];
							notificador = new String[notificaciones.length()];
							fechas = new String[notificaciones.length()];
							idUserNotifier = new String[notificaciones.length()];
							notificationtype = new String[notificaciones
									.length()];
							direccion = new String[notificaciones.length()];
							precio = new String[notificaciones.length()];
							tripDateTime = new String[notificaciones.length()];
							idadvicenotifier = new String[notificaciones.length()];
							flag = new int[notificaciones.length()];

							for (int i = 0; i < notificaciones.length(); i++) {
								JSONObject c = notificaciones.getJSONObject(i);
								notificador[i] = c.getString("FirstName") + " "
										+ c.getString("LastName");
								roles[i] = c.getString("RoleNotifier");
								idavisos[i] = c.getString("idadvice");
								direccion[i] = c.getString("DestinyName");
								fechas[i] = c.getString("CreateDateTime");
								tripDateTime[i] = c.getString("TripDateTime");
								idUserNotifier[i] = c.getString("idUserNotifier");
								idadvicenotifier[i] = c.getString("idAdviceNotifier");
								precio[i] = c.getString("PricePerPerson");
								notificationtype[i] = c
										.getString("idNotificationType");

								if (c.getString("Gender").equals("F"))
									flag[i] = R.drawable.female80x80;
								else
									flag[i] = R.drawable.male80x80;
							}
						}

					} catch (JSONException e) {
						e.printStackTrace();
					}
				}

			} catch (Exception e) {

			}

			return null;
		}

		@Override
		protected void onPostExecute(Void result) {
			super.onPostExecute(result);

			if (notificaciones != null) {
				adapter = new ListViewAdapterMisNotificaciones(getActivity(),
						notificador, roles, idavisos, direccion, fechas,
						notificationtype, flag);

				list.setAdapter(adapter);
			}

		}
	}

}
